
package com.tuanzi.loan.business.service.galaxycard;

import com.tuanzi.loan.business.entity.galaxycard.*;
import com.tuanzi.loan.vo.request.galaxycard.GalaxyCardUserPrivilegeSearchRequest;
import com.tuanzi.loan.vo.response.galaxycard.GalaxyCardUserPrivilegeSearchResponse;
import com.tuanzi.loan.core.vo.PageSearcher;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Set;

/**
 * 银河黑卡用户权益 ServiceInterface
 * @author JinRuiyang 2018/1/9 14:55:26
 */
public interface GalaxyCardUserPrivilegeService {

    /**
     * 根据 权益 id 获取权益状态列表
     * @param privilegeId 权益 id
     * @return 权益状态列表
     */
    List<GalaxyCardPrivilegeStatus> getStatusByPrivilegeId(Long privilegeId);

    /**
     * 获取权益列表
     * @return 权益列表
     */
    List<GalaxyCardPrivilege> getPrivileges();

    /**
     * GalaxyCardUserPrivilege查询
     * @param pageSearcher 请求信息
     * @return 响应列表
     */
    Page<GalaxyCardUserPrivilegeSearchResponse> list(PageSearcher<GalaxyCardUserPrivilegeSearchRequest> pageSearcher);

    /**
     * 根据id查找用户权益信息
     * @return 用户权益信息id
     */
    GalaxyCardUserPrivilege findById(Long id);

    /**
     * 更新用户权益信息
     * @param userPrivilege 用户权益信息
     */
    void update(GalaxyCardUserPrivilege userPrivilege);

    /**
     * 查询用户权益的快递信息
     * @param id 主键
     * @return 快递信息
     */
    GalaxyCardPrivilegeExpress findExpressById(Long id);

    /**
     * 查询用户权益-激活码信息
     * @param id 主键
     * @return 激活码信息
     */
    GalaxyCardPrivilegeCDKey findCDKeyById(Long id);
    /**
     * 更新用户权益的快递信息
     * @param express 更新快递信息
     */
    void update(GalaxyCardPrivilegeExpress express, GalaxyCardUserPrivilege userPrivilege);

    /**
     * 添加用户权益的快递信息
     * @param express 更新快递信息
     */
    void insert(GalaxyCardPrivilegeExpress express, GalaxyCardUserPrivilege userPrivilege);

    /**
     * 根据权益id获取该权益对应的所有激活码
     * @param privilegeId 权益id
     * @return 激活码的 set 集合
     */
    Set<String> getPrivilegeCDKeyByPrivilegeId(Long privilegeId);

    /**
     * 添加权益激活码信息
     * @param privilegeCDKey 权益激活码
     */
    void insert(GalaxyCardPrivilegeCDKey privilegeCDKey);
}
